/**
 * @file: Carta.h.
 * @author: Edwin Marcelo Guzman Buezo.
 * @date: MAY-18-2009.
 * @desc: Este archivo contiene la clase Carta.
 */
#ifndef _Carta_h_
#define _Carta_h_

#include <string>
#include <vector>
#include "Constantes.h"

using namespace std;

/**
 * La clase Carta sirve para modelar una carta en un juego de poker.
 */
class Carta{
public:
    
    /**
     * Contructor de la Clase sin valores de entrada.
     */
    Carta();
    
    /**
     * Contructor de la Clase con valores de entrada.
     * @param[in] Palo Palo.
     * @param[in] Valor Numero.
     */
    Carta(Palo palo, Valor valor);

    /**
     * Devuelve el palo de la carta.
     * @return Palo palo de la carta.
     */
    Palo getPalo();

    /**
     * Cambia el palo a la carta.
     * @param[in] Palo newPalo.
     */
    void setPalo(Palo newPalo);

    /**
     * Devuelve el valor de la carta.
     * @return Valor valor de la carta.
     */
    Valor getValor();

    /**
     * Cambia el valor de la carta.
     * @param[in] Valor newValor.
     */
    void setValor(Valor newValor);

    /**
     * Imprime por pantalla el Palo de la carta.
     */
    void imprimirPalo();

    /**
     * Imprime por pantalla el valor de la carta.
     */
    void imprimirValor();

    /**
     * Imprime por pantalla la carta.
     */
    void imprimir();

    /**
     * Imprime por pantalla la carta con un salto al final de la linea.
     */
    void imprimirS();
    
    string retornarValor1();
    string retornarValor2();
    string retornarPalo1();
    string retornarPalo2();
    string retornarPalo3();
    string retornarPalo4();
    vector<string> cartaGrande();
    void printCartasVector(vector<Carta*> cartas);
private:
    /**
     * palo representa el palo de la carta, es del tipo Palo.
     */
    Palo _palo;

    /**
     * valor representa el valor de la carta, es del tipo Valor.
     */
    Valor _valor;
};
#endif // _Carta_h_
